import request from "../../../utils/request";
import pubSubStr from '../../../utils/pubsub.js';
import PubSub from 'pubsub-js';
import moment from 'moment';

let appInstance = getApp();
Page({
  data: {
    isPlay: false,  // 是否播放
    id: 0,   // 当前歌曲id，
    songDetail: {},  // 歌曲详细信息
    songUrlData: {},  // 歌曲url详情
    currentTime: '00:00',  // 当前歌曲播放时间
    allTime: '00:00',  // 当前歌曲总时间
    currentWidth: 0,  // 当前进度条宽度，
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad: function (options) {
    this.setData({
      id: options.id
    });

    // 如果用户是退出，在进入同一首音乐，让动画旋转
    // 只有当音乐在播放，且播放是目前音乐，才让动画旋转
    if (appInstance.globalData.isMusicPlay && appInstance.globalData.musicId == options.id) {
      this.setData({
        isPlay: true
      })
    }

    //  根据id获取歌曲详情
    this.getSongDetail();

    // 获取歌曲url
    this.getSongUrl();

    // 订阅推荐页传过来的切换上/下一首音乐的id
    this.songId = PubSub.subscribe(pubSubStr.songId, (msg, data)=>{
      this.setData({
        id: data,
      }, ()=>{

        //  根据id获取歌曲详情
        this.getSongDetail();

        // 获取歌曲url
        this.getSongUrl();

        // 修改全局音乐播放id
        appInstance.globalData.musicId = data;
      });
    });

    //背景音频实例
    this.backgroundAudioManager = wx.getBackgroundAudioManager();
    // 监听系统任务栏背景音频播放事件，后台播放的音频，非小程序主页上音频
    this.backgroundAudioManager.onPlay(()=>{
      let {id} = this.data;
      this.changePlayStatus(true);
      // 修改全局音乐播放id
      appInstance.globalData.musicId = id;
    });

    // 监听系统任务栏背景音频暂停事件
    this.backgroundAudioManager.onPause(()=>{
      this.changePlayStatus(false)
    });

    // 监听系统任务栏背景音频停止事件，包括小程序右边事件
    this.backgroundAudioManager.onStop(()=>{
      this.changePlayStatus(false)
    });

    // 监听音乐是否结束
    this.backgroundAudioManager.onEnded(()=>{
      this.setData({
        currentTime: '00:00',
        allTime: '00:00',
        currentWidth: 0,
      })
    });

    // 监听背景音乐播放时间
    this.backgroundAudioManager.onTimeUpdate(()=>{
      let currentTime = this.backgroundAudioManager.currentTime;
      let allTime = this.backgroundAudioManager.duration;
      this.setData({
        currentTime: moment(currentTime*1000).format("mm:ss"),
        currentWidth: currentTime*100/allTime+"%"
      });
    })
  },

  // 改变isPlay状态
  changePlayStatus(isPlay){
    this.setData({
      isPlay
    });
    // 修改全局音乐播放状态
    appInstance.globalData.isMusicPlay = isPlay;
  },

  // 切换上一首/ 下一首音乐
  handleSong(event){
    let {type} = event.currentTarget.dataset;
    if (type === 'pre') {
      // 发布切换上一首音乐事件
      PubSub.publish(pubSubStr.preOrNextSong, 'preSong');
    } else {
      // 发布切换下一首音乐事件
      PubSub.publish(pubSubStr.preOrNextSong, 'nextSong');
    }
  },

  // 播放/暂停播放音乐
  changePlayMusic(){
    let {isPlay, songDetail, songUrlData} = this.data;
    isPlay = !isPlay;
    this.setData({
      isPlay
    });

    if (isPlay){
      // 背景音频播放
      this.backgroundAudioManager.src = songUrlData.url;
      this.backgroundAudioManager.title = songDetail.name;
    } else {
      // 暂停播放背景音频
      this.backgroundAudioManager.pause()
    }
  },

  // 获取歌曲url
  async getSongUrl(){
    let {id, songDetail, isPlay} = this.data;
    let res = await request('/song/url',{id:id });
    if (res.code === 200){
      this.setData({
        songUrlData: res.data[0],
      });

      if (isPlay) {
        // 背景音频播放
        this.backgroundAudioManager.src = res.data[0].url;
        this.backgroundAudioManager.title = songDetail.name;
      }
    }
  },

  //  根据id获取歌曲详情
  async getSongDetail(){
    let {id} = this.data;
    let res = await request('/song/detail', {ids: id});
    if (res.code === 200){
      this.setData({
        songDetail: res.songs[0],
        allTime: moment(res.songs[0].dt).format("mm:ss"),
      });
      wx.setNavigationBarTitle({
        title: res.songs[0].name
      })
    }
  },

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady: function () {

  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow: function () {

  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide: function () {

  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload: function () {
    // 取消订阅
    PubSub.unsubscribe(this.songId)
  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh: function () {

  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom: function () {

  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage: function () {

  }
})